// 36. 有效的数独
// 请你判断一个 9 x9 的数独是否有效。 只需要 根据以下规则， 验证已经填入的数字是否有效即可。

// 数字 1 - 9 在每一行只能出现一次。
// 数字 1 - 9 在每一列只能出现一次。
// 数字 1 - 9 在每一个以粗实线分隔的 3 x3 宫内只能出现一次。（ 请参考示例图）
// 数独部分空格内已填入了数字， 空白格用 '.'
// 表示。
/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function (board) {
  let col = new Array(9).fill(0).map(() => new Map())
  let cells = new Array(9).fill(0).map(() => new Map())
  for (let i = 0; i < 9; i++) {
    let row = new Map()
    for (let j = 0; j < 9; j++) {
      let value = board[i][j]
      let index = Math.floor(i / 3) * 3 + Math.floor(j / 3)
      if ((row.get(value) === 1 || col[j].get(value) === 1 || cells[index].get(value) === 1)) {
        return false
      } else {
        if(value !== '.'){
          row.set(value, 1)
          col[j].set(value, 1)
          cells[index].set(value,1)
        }
        
      }

    }
  }

  return true
};

var board = [
  ["5", "3", ".", ".", "7", ".", ".", ".", "."],
  ["6", ".", ".", "1", "9", "5", ".", ".", "."],
  [".", "9", "8", ".", ".", ".", ".", "6", "."],
  ["8", ".", ".", ".", "6", ".", ".", ".", "3"],
  ["4", ".", ".", "8", ".", "3", ".", ".", "1"],
  ["7", ".", ".", ".", "2", ".", ".", ".", "6"],
  [".", "6", ".", ".", ".", ".", "2", "8", "."],
  [".", ".", ".", "4", "1", "9", ".", ".", "5"],
  [".", ".", ".", ".", "8", ".", ".", "7", "9"]
]


console.log(isValidSudoku(board))
